/*****************************************************************************
 *                Projet Master RIM : Reconnaissance de panneaux             *
 *                      Guillaume MONTAVON & Renaud DAVID                    *
 *                                                                           *
 *                Fichier contenant les fonctions javascript                 *
 *****************************************************************************/

//lorsqu'il y a un champs non rempli dans un formulaire on modifie la couleur de fond
$.validator.setDefaults({
	highlight: function(input) {
		$(input).addClass("ui-state-highlight");
	},
	unhighlight: function(input) {
		$(input).removeClass("ui-state-highlight");
	}
});

$.fn.loadWithoutCache = function (){
	var elem = $(this);
	var func = arguments[1];
	$.ajax({
		url: arguments[0],
		cache: false,
		dataType: "html",
		success: function(data, textStatus, XMLHttpRequest) {
			elem.html(data);
			if(func != undefined)
				func(data, textStatus, XMLHttpRequest);
		}
	});
	return elem;
}

//converti de degré en radian
function toRad(value) {
	return value * Math.PI / 180;
}

//donne la distance en mètre entre deux coordonnées
function convertirLatLongMetre(lat1, lon1, lat2, lon2) {
	var R = 6371; // rayon terre km
	var dLat = toRad(lat2-lat1);
	var dLon = toRad(lon2-lon1);
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	
	return d;
}

//permet d'obtenir la latitude et la longitude de l'utilisateur
function obtenirPosition() {

	if(google.loader.ClientLocation) {
			try {
				map.setCenter(new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude));
			} catch (e) {}
	}
	if (navigator.geolocation) {
		try {
			navigator.geolocation.getCurrentPosition(function(position) {
				map.setCenter(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
			}, function() {
				// fail - geolocation denied by user. do nothing.
			});
		} catch (e) {}
	}
	else if (google.gears) {
		try {
			var geo = google.gears.factory.create('beta.geolocation');
			geo.getCurrentPosition(function(position) {
				// success - geolocation authorized by user. relocate the map.
				map.setCenter(new google.maps.LatLng(position.latitude, position.longitude));
			}, function() {
				// fail - geolocation denied by user. do nothing.
			});	
		} catch (e) {}
	}			
}

//déconnecte l'utilisateur
function deconnexion() {
	$("#deconnexion").click(function() {
		$.ajax({
			url: 'requete.php?objet=deconnexion',
			success: function(data) {
				var reponse = jQuery.parseJSON(data);
				if(reponse.success) {
					$("#loginRegister").html("Connexion");
					connecte = false;
					MAJMenu();
					MAJNotif();
					MAJElemPageConnecte();
					$("#loginRegister").click(function(){
						if ($("#connexionBoiteForm").is(":hidden"))
							$("#connexionBoiteForm").slideDown("slow");
						else
							$("#connexionBoiteForm").slideUp("slow");
					});
				}
			   else {
					$("#nomErreur").html("Erreur lors de la deconnexion.");
					$("#dialog-error").dialog("open");
				}
			}
		});
	});
}

//vérifie que l'utilisateur a correctement rempli les champs des différents formulaires
function verificationFormulaires() {

	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de création d'utilisateur
	$("#registerForm").validate({
		rules: {
			login: {
				required: true,
				minlength: 2
			},
			password: {
				required: true,
				minlength: 6
			},
			mail: {
				required: true,
				email: true
			}
		},
		messages: {
			login: {
				required: "identifiant obligatoire",
				minlength: "2 caractères minimum"
			},
			password: {
				required: "Veuillez entrer un mot de passe",
				minlength: "6 caractères minimum"
			},
			nom: {
				required: "nom obligatoire"
			},
			prenom: {
				required: "prénom obligatoire"
			},
			mail: "Veuillez entrer une adresse mail valide",
		},
		submitHandler: function(form) {
			$(":button:contains('Création d\'un compte')").attr("disabled",true).addClass( 'ui-state-disabled' );
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){
					var reponse = jQuery.parseJSON(msg);
					$(":button:contains('Création d\'un compte')").attr("disabled",false).removeClass( 'ui-state-disabled' );
					if(reponse.success) {
						$( "#dialog-form" ).dialog( "close" );
						alert("utilisateur enregistré");
					}
					else {
						$("#nomErreur").html("Erreur : votre identifiant existe déjà dans la base de données, veuillez réessayer");
						$("#dialog-error").dialog( "open" );
					}
			   }
			});
			
		}
	});

	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de connexion
	$("#connexionForm").validate({
		rules: {
			pass: {
				required: true,
				minlength: 6
			}
		},
		messages: {
			pseudo: {
				required: "login obligatoire"
			},
			pass: {
				required: "Veuillez entrer un mot de passe",
				minlength: "6 caractères minimum"
			}
		},
		submitHandler: function(form) {
			$("#loginRegister").html("<img src='images/charge16.gif' alt='chargement'/> chargement");
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){
					var reponse = jQuery.parseJSON(msg);
					if(reponse.success) {
						$("#loginRegister").html("Bienvenue "+$("#pseudo").val() + '<img src="images/icones/logout32.png" style="vertical-align:middle;" height="25" id="deconnexion" alt="Déconnexion" title="Déconnexion" />');
						deconnexion();
						$("#connexionBoiteForm").slideUp("slow");
						connecte = true;
						MAJMenu();
						MAJNotif();
						MAJElemPageConnecte();
						$("#loginRegister").unbind('click');
					}
				   else {
						$("#loginRegister").html("Connexion");
						$("#nomErreur").html("Erreur lors de la connexion. Votre login ou mot de passe est incorrect");
						$("#dialog-error").dialog( "open" );
					}
			   }
			});
		}
	});


}

//vérifie que l'utilisateur a correctement rempli les champs des différents formulaires
function verificationValidation() {

	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de création d'utilisateur
	$("#validationForm").validate({
		rules: {
			fiabilite: {
				required: true,
				number: true
			},
			type: {
				required: true,
				number: true,
				min: 1
			}
		},
		messages: {
			fiabilite: {
				required: "fiabilite obligatoire",
				number: "Veuillez entrer un nombre"
			},
			type: {
				required: "Veuillez choisir un type",
				min: "Veuillez choisir un type"
			}
		},
		submitHandler: function(form) {
			$("#validerPanneau").attr("disabled",true).addClass('ui-state-disabled');
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){
					var json = jQuery.parseJSON(msg);
					$("#validerPanneau").attr("disabled",false).removeClass( 'ui-state-disabled' );
					if(json.success) {
						$(form).resetForm();
						MAJImgAValider();
						MAJNotif();
						$("#typeImage").html("");
					}
					else {
						$("#nomErreur").html(json.message);
						$("#dialog-error").dialog("open");
					}
			   }
			});
		}
	});

}

//vérifie que l'utilisateur a correctement rempli les champs des différents formulaires
function verificationImporterGPX() {

	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de création d'utilisateur
	$("#formImporterGPX").validate({
		rules: {
			fichierUpload: {
				required: true
			}
		},
		messages: {
			fichierUpload: {
				required: "Veuillez choisir un fichier à uploader"
			}
		},
		submitHandler: function(form) {
			$("#loadImport").html('<img src="images/charge16.gif" alt="chargement"/>');
			$("#boutonImporterFichier").attr("disabled",true).addClass('ui-state-disabled');
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){$
					var json = jQuery.parseJSON(msg);
					
					$("#boutonImporterFichier").attr("disabled",false).removeClass('ui-state-disabled');
					if(json.success) {
						$(form).resetForm();
						$("#nomInfo").html("Importation réussi");
						$("#dialog-info").dialog("open");
						MAJNotif();
					}
					else {
						$("#nomErreur").html(json.message);
						$("#dialog-error").dialog("open");
					}
					$("#loadImport").html('');
			   }
			});
		}
	});
	
	
	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de création d'utilisateur
	$("#formImporterPhotos").validate({
		rules: {
			fichierUpload: {
				required: true
			}
		},
		messages: {
			fichierUpload: {
				required: "Veuillez choisir un fichier zip à uploader"
			}
		},
		submitHandler: function(form) {
			$("#loadImportPhoto").html('<img src="images/charge16.gif" alt="chargement"/>');
			$("#boutonImporterPhoto").attr("disabled",true).addClass('ui-state-disabled');
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){$
					var json = jQuery.parseJSON(msg);
					
					$("#boutonImporterPhoto").attr("disabled",false).removeClass('ui-state-disabled');
					if(json.success) {
						$(form).resetForm();
						$("#nomInfo").html("Importation réussi");
						$("#dialog-info").dialog("open");
					}
					else {
						$("#nomErreur").html(json.message);
						$("#dialog-error").dialog("open");
					}
					$("#loadImportPhoto").html('');
			   }
			});
		}
	});

}

//vérifie que l'utilisateur a correctement rempli les champs des différents formulaires
function verificationNouveauType() {

	//vérifie que l'utilisateur a correctement rempli les champs du formulaire de création d'utilisateur
	$("#nouveauTypeForm").validate({
		rules: {
			imageType: {
				required: true
			}
		},
		messages: {
			imageType: {
				required: "Veuillez choisir une image à uploader"
			},
			libelleType: {
				required: "Veuillez entrer un libellé"
			}
		},
		submitHandler: function(form) {
			$("#loadType").html('<img src="images/charge16.gif" alt="chargement"/>');
			$("#boutonNouveauType").attr("disabled",true).addClass('ui-state-disabled');
			$(form).ajaxSubmit({
				//target: "#result",
				success: function(msg){$
					var json = jQuery.parseJSON(msg);
					
					$("#boutonNouveauType").attr("disabled",false).removeClass('ui-state-disabled');
					if(json.success) {
						$(form).resetForm();
						MAJListeType();
						$("#nomInfo").html("Ajout réussi");
						$("#dialog-info").dialog("open");
						MAJNotif();
					}
					else {
						$("#nomErreur").html(json.message);
						$("#dialog-error").dialog("open");
					}
					$("#loadType").html('');
			   }
			});
		}
	});

}

//Création des boites de dialogue qui permetteront d'afficher un message d'erreur ou d'info
function boiteDialogErreurInfo() {

	$("#dialog-error").dialog({
		modal: true,
		autoOpen: false,
		show: "blind",
		hide: "explode",
		dialogClass: "dial",
		zIndex: 9,
		buttons: {
			Ok: function() {
				$(this).dialog("close");
			}
		}
	});

	$("#dialog-info").dialog({
		modal: true,
		autoOpen: false,
		show: "blind",
		hide: "explode",
		dialogClass: "dial",
		zIndex: 9,
		buttons: {
			Ok: function() {
				$(this).dialog("close");
			}
		}
	});

	$('.dial.ui-dialog').css({position:"fixed"});

}

//création de la boite de dialogue pour créer un nouvel utilisateur
function boiteDialogCreationCompte() {

	$("#dialog-form").dialog({
		autoOpen: false,
		show: "blind",
		hide: "explode",
		height: 500,
		width: 400,
		modal: true,
		buttons: {
			"Création d'un compte": function() {
				$("#registerForm").submit();
			},
			Cancel: function() {
				$(this).dialog("close");
			}
		},
		close: function() {
			//allFields.val( "" ).removeClass( "ui-state-error" );
		}
	});

}

//création de tous les boutons
function creationBoutons() {

	$("#connexion").button({icons: {primary: "ui-icon-person"}});
	creationBoutonsMenu();
}

function creationBoutonsMenu() {
	if(connecte) {
		$("#listeBoutons").button({icons: {primary: "ui-icon-home"}}).click(function() {window.location = "index.php";});
		$("#create-user").button({icons: {primary: "ui-icon-disk"}}).click(function() {$("#dialog-form").dialog("open");});
		$("#validerPanneaux").button({icons: {primary: "ui-icon-check"}}).click(function() {window.location = "validation.php";});
		$("#gestionTypes").button({icons: {primary: "ui-icon-flag"}}).click(function() {window.location = "typepanneau.php";});
	}
}

function creationBoutonValider() {

	$("#validerPanneau").button({icons: {primary: "ui-icon-check"}});
	$("#boutonValiderDoublon").button({icons: {primary: "ui-icon-grip-solid-horizontal"}}).click(function() {
		$.ajax({
			url: 'requete.php?objet=doublonPanneau&panExistant=' + $("#idPanneauDoublon").val() + '&panNonValide=' + $("#validationIdPanneau").val() + '&gardeImage=' + $('input[type=radio][name=gardeImage]:checked').val(),
			success: function(data) {
				var json = jQuery.parseJSON(data);
				if(json.success) {
					$("#validationForm").resetForm();
					MAJImgAValider();
					MAJNotif();
					$("#typeImage").html("");
					$("#nomInfo").html("Panneaux fusionnés.");
					$("#dialog-info").dialog("open");
				}
				else {
					$("#nomErreur").html("Erreur lors de la fusion des panneaux.");
					$("#dialog-error").dialog("open");
				}
			}
		});
	});
	$("#supprimerPanneau").button({icons: {primary: "ui-icon-closethick"}}).click(function() {
		$.ajax({
			url: 'requete.php?objet=supprimerPanneau&id=' + $("#validationIdPanneau").val(),
			success: function(data) {
				var json = jQuery.parseJSON(data);
				if(json.success) {
					$("#validationForm").resetForm();
					MAJImgAValider();
					MAJNotif();
					$("#typeImage").html("");
					$("#nomInfo").html("Panneau supprimé.");
					$("#dialog-info").dialog("open");
				}
				else {
					$("#nomErreur").html("Erreur lors de la suppression du panneau.");
					$("#dialog-error").dialog("open");
				}
			}
		});
	});

}

function creationBoutonExporter() {

	$("#boutonTelechargerGPX").button({icons: {primary: "ui-icon-disk"}}).click(function() {window.location = "requete.php?objet=getFichierGPX";});
	$("#boutonTelechargerPhotos").button({icons: {primary: "ui-icon-disk"}}).click(function() {
		$("#loadTelPhotos").html('<img src="images/charge16.gif" alt="chargement"/>');
		$("#boutonTelechargerPhotos").attr("disabled",true).addClass('ui-state-disabled');
		$.ajax({
			url: 'requete.php?objet=compresserPhotoZIP',
			success: function(data) {
				var reponse = jQuery.parseJSON(data);
				if(reponse.success)
					window.location = "photos/photos.zip";
				else {
					$("#nomErreur").html("Erreur lors de la génération du ZIP.");
					$("#dialog-error").dialog( "open" );
				}
				$("#loadTelPhotos").html('');
				$("#boutonTelechargerPhotos").attr("disabled",false).addClass('ui-state-disabled');
			}
		});	
	
	});
	
	creationBoutonImporter();
}

function creationBoutonImporter() {

	if(connecte) {
		$("#boutonImporterFichier").button({icons: {primary: "ui-icon-check"}});
		$("#boutonImporterPhoto").button({icons: {primary: "ui-icon-check"}});
	}

}

function creationBoutonAjoutType() {

	if(connecte)
		$("#boutonNouveauType").button({icons: {primary: "ui-icon-plusthick"}});

}

function MAJNotif() {
	
	if(connecte) {
		$.ajax({
			url: 'requete.php?objet=nbNotif',
			cache: false,
			success: function(data) {
				if(data == "0" || data == 0)
					$("#notif").css("background-image","url(images/icones/notif.png)");
				else
					$("#notif").css("background-image","url(images/icones/notif_rouge.png)");
				$("#notif").html(data);
			}
		});
	}
	else {
		try {
			$("#notif").css("background-image","none");
			$("#notif").html("");
		} catch(e) {}
	}
}

function supprimerMarker(id) {
	
	$.ajax({
		url: 'requete.php?objet=supprimerPanneau&id='+id,
		success: function(data) {
			var json = jQuery.parseJSON(data);
			if(json.success) {
				$("#nomInfo").html("Panneau supprimé.");
				$("#dialog-info").dialog("open");
			}
			else {
				$("#nomErreur").html("Erreur lors de la suppression du panneau.");
				$("#dialog-error").dialog("open");
			}
		}
	});
	
}

function MAJImgAValider() {
	
	$("#listePanneau").html('<div id="loader" style="margin: auto;margin-top: 150px;width: 300px; height: 150px;"><center>Traitement en cours ...<br/><img src="images/charge128.gif" alt="chargement..." /></center></div>');
	
	$.ajax({
		url: 'requete.php?objet=imgAValider',
		success: function(data) {
			var json = jQuery.parseJSON(data);
			
			if(json.nbPanneau > 0) {
				$("#validationIdPanneau").val(json.idPanneau);
				$("#listePanneau").html('<h2>Panneau n&deg;'+json.idPanneau+'</h2>Latitude='+json.latitudePanneau+', Longitude='+json.longitudePanneau+'<br/><br/><img src="photos/'+json.cheminPhoto+'" alt="Image no'+json.idPanneau+'" width="300"/>');
			
				$.ajax({
					url: 'requete.php?objet=panneauEnDouble&idPanneau='+json.idPanneau,
					success: function(data) {
						var json = jQuery.parseJSON(data);
						
						if(json.id > 0) {
							$("#idPanneauDoublon").val(json.id);
							$('#validerDoublon').show();
							$('#doublonPanneau').show();
							$("#doublonPanneau").html('<h2>Panneau semblable</h2>(même position)<br/><br/><img src="photos/'+json.cheminPhoto+'" alt="Image no'+json.id+'" width="300"/>');
						}
						else {
							$('#validerDoublon').hide();
							$('#doublonPanneau').hide();
						}
					}
				});
			}
			else {
				$("#idPanneauDoublon").val(0);
				$('#validationForm').hide();
				$('#validerDoublon').hide();
				$('#doublonPanneau').hide();
				$("#listePanneau").html('<h2>Aucun panneaux à valider</h2>');
			}
		}
	});

}

function MAJImgType() {

	if($("#type").val() > 0) {
		$.ajax({
			url: 'requete.php?objet=imgType&type=' + $("#type").val(),
			success: function(data) {
				$("#typeImage").html('<img src="'+data+'" alt="type de panneau" height="100"/>');
			}
		});
	}
	else
		$("#typeImage").html('');

}

function MAJMenu() {
	
	$.ajax({
		url: 'requete.php?objet=obtenirMenu',
		success: function(data) {
			$("#menu").html(data);
			creationBoutonsMenu();
		}
	});
	
}

function MAJFormImportation() {
	
	$.ajax({
		url: 'requete.php?objet=obtenirFormImportation',
		success: function(data) {
			$("#importation").html(data);
			creationBoutonImporter();
		}
	});
	
}

function MAJFormNouveauType() {
	
	$.ajax({
		url: 'requete.php?objet=obtenirFormNouveauType',
		success: function(data) {
			$("#ajoutNouveauType").html(data);
			creationBoutonAjoutType();
		}
	});
	
}

function MAJListeType() {
	
	$.ajax({
		url: 'requete.php?objet=obtenirListeType',
		success: function(data) {
			$("#listeType").html(data);
		}
	});
	
}

function testSiConnecte() {
	
	//si l'utilisateur n'est pas connecté, on lui demande si il souhaite le faire
	if(!connecte) {
		$("#dialog-info").dialog('option', 'buttons', {
			'Ok': function() {
				$(this).dialog('close');
				$("#connexionBoiteForm").slideDown("slow");
			}
		});
		$("#nomInfo").html("Vous n'êtes pas connecté. Pour pouvoir envoyer des messages, veuillez vous connecté ou vous enregistrer afin d'accéder à cette fonction (boite en haut à droite du site).");
		$("#dialog-info").dialog( "open" );
	}
	else {
		deconnexion();
		$("#loginRegister").unbind('click');
	}
	
}